wayland: Plug surface leak
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 24 Nov 2015 16:41:58 +0000 (17:41 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Tue, 24 Nov 2015 19:52:12 +0000 (20:52 +0100)
Other backends take care of the cairo surface destruction in
GdkWindow::destroy. We must do the same here, or the cairo_surface
and its corresponding wl_buffer are left dangling.

https://bugzilla.gnome.org/show_bug.cgi?id=747295

gdk/wayland/gdkdisplay-wayland.c
gdk/wayland/gdkwindow-wayland.c

index 64529fb32c563009262e2500f3581a179f56b5f2..804c1673e368d817149bef5f035113e8d714692c 100644 (file)
@@ -1029,6 +1029,8 @@ gdk_wayland_cairo_surface_destroy (void *p)
 {
   GdkWaylandCairoSurfaceData *data = p;
 
+  g_print ("EHMMMM...\n");
+
   if (data->buffer)
     wl_buffer_destroy (data->buffer);
 
@@ -1056,6 +1058,8 @@ _gdk_wayland_display_create_shm_surface (GdkWaylandDisplay *display,
   data->scale = scale;
   data->busy = FALSE;
 
+  g_print ("create shm surface...\n");
+
   stride = width * 4;
 
   data->pool = create_shm_pool (display->shm,
index 0834235b12678009a8d1262145e63d5ac4790222..a536e1f1fae783a8e018e1fd1e0eb7b5bf2c694c 100644 (file)
@@ -1769,7 +1769,11 @@ gdk_wayland_window_destroy (GdkWindow *window,
   gdk_wayland_window_hide_surface (window);
 
   if (impl->cairo_surface)
-    cairo_surface_finish (impl->cairo_surface);
+    {
+      cairo_surface_finish (impl->cairo_surface);
+      cairo_surface_destroy (impl->cairo_surface);
+      impl->cairo_surface = NULL;
+    }
 }
 
 static void